package uba.fi.tda.tp2;

public abstract class HashTable {

	protected EntradaHash[] vector;
	private int tamanioActual;

	public HashTable(int tamanio) {
		tamanioActual = tamanio;
		vector = new EntradaHash[tamanio];
		vaciar();
	}
	
	
	protected abstract int buscarPos(Hasheable elemento);
	
	public final Hasheable buscar(Hasheable elemento) {
		int posicionActual = buscarPos(elemento);
		return (vector[posicionActual]!= null && vector[posicionActual].isActivo()) ? vector[posicionActual].getElemento() : null;
	}
	
	public EntradaHash[] getVector() {
		return vector;
	}


	public void setVector(EntradaHash[] vector) {
		this.vector = vector;
	}


	public int getTamanioActual() {
		return tamanioActual;
	}

	public void setTamanioActual(int tamanioActual) {
		this.tamanioActual = tamanioActual;
	}

	public void eliminar(Hasheable elemento) {
		int posicionActual = buscarPos(elemento);
		vector[posicionActual].setActivo(false);

	}

	public void insertar(Hasheable elemento) {
		int posicionActual = buscarPos(elemento);
		vector[posicionActual] = new EntradaHash(elemento,true);
	}

	public void vaciar() {
		for(int i = 0; i<vector.length; i++){
			vector[i] = null;
		}
	}
}
